package ch2_string

import (
	"fmt"
	"strconv"
)

var (
	str       string
	int_var   int
	int64_var int64
)

func Print() {
	fmt.Println("ch2_string Print")

	fmt.Println("ch2_string Print str: ", str)

	str = "100"
	// string转int：
	re1, err := strconv.Atoi(str)
	fmt.Println("strconv.Atoi(string) err: ", err, " result: ", re1)
	// string转int64：
	re2, err := strconv.ParseInt(str, 10, 64)
	fmt.Println("strconv.ParseInt(string, 10, 64) err: ", err, " result: ", re2)

	int_var = 110
	int64_var = 100000000000000000
	// int转string：
	str_re := strconv.Itoa(int_var)
	fmt.Println("strconv.Itoa(int_var) result: ", str_re)
	// int64转string：
	str_re2 := strconv.FormatInt(int64_var, 10)
	fmt.Println("strconv.FormatInt(int64_var, 10) result: ", str_re2)

	// fmt.Println("sum: ", sum)
}

func Test() {

	// go 中不可以这么直接修改string
	// var s string = "hello"
	// s[0] = 'c'

	// 将 string 转为 byte数组就可以
	s := "hello"
	c := []byte(s) // 将字符串 s 转换为 []byte 类型
	c[0] = 'c'
	s2 := string(c) // 再转换回 string 类型
	fmt.Printf("%s\n", s2)
}

func Test01() {
	// Go 中可以使用 + 操作符来连接两个字符串：
	s := "hello,"
	m := " world"
	a := s + m
	fmt.Printf("%s\n", a)
}

func Test02() {
	s := "hello"
	s = "c" + s[1:] // 字符串虽不能更改，但可进行切片操作
	fmt.Printf("%s\n", s)
}

func Test03() {
	// 如果要声明一个多行的字符串怎么办？可以通过 ` 来声明：
	m := `hello
    world`
	fmt.Printf("%s\n", m)
}

// func main() {
// 	fmt.Println("ch2_string main")

// 	fmt.Println("ch2_string main str: ", str)

// 	str = "100"
// 	// string转int：
// 	re1, err := strconv.Atoi(str)
// 	fmt.Println("strconv.Atoi(string) err: ", err, " result: ", re1)
// 	// string转int64：
// 	re2, err := strconv.ParseInt(str, 10, 64)
// 	fmt.Println("strconv.ParseInt(string, 10, 64) err: ", err, " result: ", re2)

// 	int_var = 110
// 	// int转string：
// 	str_re := strconv.Itoa(int_var)
// 	fmt.Println("strconv.Itoa(int_var) result: ", str_re)
// 	// int64转string：
// 	str_re2 := strconv.FormatInt(int64_var, 10)
// 	fmt.Println("strconv.FormatInt(int64_var, 10) result: ", str_re2)

// 	// fmt.Println("sum: ", sum)
// }
